package org.desaes;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
 * 常见加密算法 DesAes
 * @author aqiang9  2020-11-08
 */
public class DesAesDemo
{
	public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException
	{
		// 原文
		String input ="你好";
		// des 秘钥  不能少于 8  位
		String key = "12345678" ;

		// 算法
		String algorithm = "DES";
		String transformation = "DES";

		// Cipher：密码，获取加密对象
		// transformation:参数表示使用什么类型加密
		Cipher cipher = Cipher.getInstance(transformation);
		// 指定秘钥规则
		// 第一个参数表示：密钥，key的字节数组
		// 第二个参数表示：算法
		SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
		// 对加密进行初始化
		// 第一个参数：表示模式，有加密模式和解密模式
		// 第二个参数：表示秘钥规则
		cipher.init(Cipher.ENCRYPT_MODE,sks);
		// 进行加密
		byte[] bytes = cipher.doFinal(input.getBytes());
		// 打印字节，因为ascii码有负数，解析不出来，所以乱码
		//        for (byte b : bytes) {
		//            System.out.println(b);
		//        }
		// 打印密文
		System.out.println(new String(bytes));

		System.out.println( new String(  Base64.getEncoder().encode(bytes) )   );
	}

}
